SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE FUNCTION [dbo].[fnLiqDiasTrabajados] (@Agente INT,  @Desde DATETIME, @Hasta DATETIME, @Ambito INT, @OrganizacionAnalizar INT)  
RETURNS INT AS  
BEGIN 

 -- @Ambito = (0 Todos, 1 Publico, 2 Privado)

declare @PA datetime
declare @PB datetime
declare @FA datetime
declare @FB datetime
declare @Baja varchar(1)
declare @Licencia int
declare @Resultado int
declare @DiasHabiles int
declare @meses int
declare @anios int

Select @PA = @Desde, @PB=@Desde, @Resultado=0, @diashabiles=0

DECLARE Subservicios CURSOR forward_only  FOR
SELECT ss.FechaAlta, ss.FechaBaja, ss.Baja, Licencia 
	FROM tb_SubserviciosAgentes ss, tb_ServiciosAgentes s
	INNER JOIN tb_Organizaciones O ON S.UbicacionOrig = O.idOrganizaciones 
	WHERE s.agente = @Agente AND (ss.FechaBaja Is Null or ss.FechaBaja>=@Desde) AND ss.FechaAlta<=@Hasta 
		AND s.idServicioAgente = ss.ServicioAgente
		AND ((@Ambito=0 AND o.EsPrivada IN('N','S')) OR (@Ambito=1 AND o.EsPrivada IN('N')) OR (@Ambito=2 AND o.EsPrivada IN('S')))
		AND ((@OrganizacionAnalizar IS NULL AND 1=1) OR (@OrganizacionAnalizar IS NOT NULL AND S.UbicacionOrig = @OrganizacionAnalizar))
	ORDER BY ss.FechaAlta
FOR READ ONLY


OPEN SubServicios

fetch next from SubServicios into @FA, @FB, @Baja,@Licencia

while @@fetch_status = 0
BEGIN
	-- SituacionLaboralAsociada de la Licencia en 4 ('Lic. S/Goce Hab.') 
	if (Select SituacionLaboralAsociada from tb_Licencias where idLicencia = @Licencia) NOT IN (4,10) Or ( @Licencia Is NULL)
		begin
		if @baja = 'N' or @FB > @Hasta
			Select @FB = @Hasta
	   	if @FA>@PB
			BEGIN
	   		IF @pa<>@Pb 
				Select @Resultado=@Resultado+(datediff(day,@PA,@PB)+1)
				
			Select @PA=@FA,@PB=@FB
			end
		else
			begin
			if @FB>@PB
				Select @PB = @FB
			end
		end

	fetch next from SubServicios into  @FA, @FB, @Baja,@Licencia
end

close SubServicios
deallocate SubServicios
IF @pa<>@Pb 
	select @resultado = @resultado+(datediff(day, @PA,@PB)+1)


RETURN (@Resultado)

END


GO
GRANT EXECUTE ON  [dbo].[fnLiqDiasTrabajados] TO [public]
GO
